# 作者: 陈其志 
# 2025年02月24日21时39分37秒 
# 2716847110@qq.com
import copy


def use_copy():
    """
    浅copy：复制的是对象本身，只复制了第一层
    :return:
    """
    a = [11, 22]
    b = [33, 44]
    c = [a, b]  # 这里复制的是c对a,b的引用
    d = copy.copy(c)  # 只复制了第一层，也就是c=[a,b]这里面的a,b都是对象而不是数据
    print(c)  # [[11, 22], [33, 44]]
    print(id(c))
    print(d)  # [[11, 22], [33, 44]]
    print(id(d))
    a[0] = 55  # 所以修改a的数据区域的时候，所有引用a对象的对象都会改变其值
    print(c)  # [[1, 22], [33, 44]]
    print(id(c[0]))
    print(d)  # [[1, 22], [33, 44]]
    print(id(d[0]))


def use_deepcopy():
    """
    深copy：深copy会复制对象及其内部元素，内部元素也会被复制。
    :return:
    """
    a = [11, 22]
    b = [33, 44]
    c = [a, b]
    d = copy.deepcopy(c)  # 一直复制到最底层，也就是数据区
    print(c)  # [[11, 22], [33, 44]]
    print(id(c))
    print(d)  # [[11, 22], [33, 44]]
    print(id(d))
    a[0] = 50
    print(c)  # [[50, 22], [33, 44]]    # c是对a,b对象的引用，所以修改a的值会影响引用a的值
    print(d)  # [[11, 22], [33, 44]]
    print(id(c[0]))
    # d是深copy一直copy到数据区域，然后在新的区域创建数据并复制给d的引用对象，
    # d已经不是对a,b的引用了，而是又复制了对a,b的引用,并复制一个新的数据区域给d的引用
    print(id(d[0]))


if __name__ == '__main__':
    use_copy()
    print('--' * 50)
    use_deepcopy()
    print('--' * 50)
